﻿/**
 *	@file		CCEGLViewProtocol.h
 *	@author		NeoZhang
 *	@version	v0.1
 *	@date		2013/09/03
 *	@brief		
 */

#ifndef __CC_EGLVIEW_PROTOCOL_H__
#define __CC_EGLVIEW_PROTOCOL_H__

#include "CCPlatformMacros.h"
#include "cocoa\CCGeometry.h"

//!	适配方案
enum ResolutionPolicy
{
	/**
	 *	整个应用程序在指定区域中可见而不保持原始的宽高比。
	 *
	 *	会发生失真，应用程序可能出现拉伸或压缩。
	 */
	kResolutionExactFit,
	/**
	 *	整个应用程序填满指定区域，不会失真，但可能会有进行一些剪裁。
	 *
	 *	保持应用程序原始的宽高比。
	 */
	kResolutionNoBorder,
	/**
	 *	在指定区域内，整个应用程序可见，不失真。
	 *
	 *	保持应用程序的宽高比，应用程序两边可能会显示边框。
	 */
	kResolutionShowAll,
	kResolutionUnKnown,
};

NS_CC_BEGIN

class CC_DLL CCEGViewProtocol
{
public:
	//!	构造函数
	CCEGViewProtocol();
	//!	析构函数
	virtual ~CCEGViewProtocol();

	//!	强制摧毁EGL视图，子类必须实现此方法
	virtual void	end() = 0;

	//!	获取OpenGl渲染器是否准备好，子类必须实现此方法
	virtual bool	isOpenGLReady() = 0;

	//!	交换前后缓冲区，子类必须实现此犯法
	virtual void	swapBuffers() = 0;

	//!	打开或关闭输入法键盘，子类必须实现此方法
	virtual void	setIMEKeyboardState(bool bOpen) = 0;

	/**
	 *	获取视图框架(屏幕尺寸)的大小
	 *
	 *	在一般情况下，它返回屏幕大小，因为EGL视图是一个全屏视图。
	 */
	virtual const CCSize& getFrameSize() const;

	/**
	 *	设置opengl视图的框架(应用分辨率)大小
	 */
	virtual void setFrameSize(float width, float height);

	/**
	 *	获取opengl视图的可视区域大小
	 */
	virtual CCSize getVisibleSize() const;

	/**
	 *	获取opengl视图可视原点坐标
	 */
	virtual CCPoint getVisibleOrgin() const;

protected:
	//!	真实屏幕大小
	CCSize	m_obScreenSize;
	//!	分辨率的大小，它是适合应用资源的大小
	CCSize	m_obDesignResolutionSize;
	//!	视窗大小
	CCRect	m_obViewPortRect;
	//!	窗口名称
	char	m_szViewName[50];

	//!
	float m_fScaleX;
	//!
	float m_fScaleY;
	//! 适配方案
	ResolutionPolicy m_eResolutionPolicy;
};
NS_CC_END
#endif